package dmir.wikipedia.cleaners;


import java.util.regex.Pattern;
import dmir.wikipedia.addons.SpanishWikiAreaUtil;
import dmir.wikipedia.addons.SpanishWikiCoordinatesUtil;
import dmir.wikipedia.addons.SpanishWikiPopulationUtil;

public class SpanishWikiPageCleaner extends AbstractWikiPageCleaner {
    
	
    public SpanishWikiPageCleaner(String title, StringBuilder rawText) {
        super(title, rawText);
    }
    

    	@Override
	public boolean isMediaLink(String text) 
	{
		return text.startsWith("[[Archivo:") 
				|| text.startsWith("[[File:") 
				|| text.startsWith("[[Image:")
				|| text.startsWith("[[Imagen:");
	}




	@Override
	public Pattern getDisambTemplatePattern() 
	{
		return Pattern.compile("\\{\\{desambiguaci.n\\}\\}");
	}




	@Override
	public Pattern getRedirectPattern() 
	{
		return Pattern.compile("#(REDIRECCI.N|REDIRECT):?\\s*\\[\\[\\s*(.+)\\s*\\]\\]", Pattern.CASE_INSENSITIVE);
	}




	@Override
	public Pattern getMediaLinksPattern() 
	{
		return Pattern.compile("(\\[\\[(Archivo:|File:|Image:|Imagen:)?)|(\\]\\])", Pattern.CASE_INSENSITIVE);
	}




	@Override
	public Pattern getCategoryPattern() 
	{
		return Pattern.compile("Categor.a:(.+)");
	}




	@Override
	public Pattern getSpecialPattern() 
	{
		return Pattern.compile(
	            		"(((Lists_of_)|(Listas_de_)|(Lista_de_)|(List_of_)|(Tabela_de_)|(Table_of_)|(Media:)|(File:)" +
	                    "|(Archivo:)|(MediaWiki:)|(Plantilla:)|(Wikiproyecto:)|(Image:)|(Wikip.dia:)|(Anexo:)|(Template:)|(Index_of_)" +
	                    "|(Especial:)|(Usu.rio:)|(User:)|(Ayuda:)|(Manual:)|(Wikt:)|(Wiktionary:)|(Wikinews:)|(Portal:)|(Livro:)|(Discusi.n)" +
	                    WIKIPEDIA_LANGUAGE_PREFIXES + ").+)" +
	                    "|(.*#.+)|(.+\\(desambiguaci.n\\))|(.+\\(disambiguation\\))\\s", Pattern.CASE_INSENSITIVE);
	}



	@Override
	protected Pattern getIgnoreTitlePattern() 
	{
		return Pattern.compile(
	            "(Anexo:)|(Wikiproyecto:)|(MediaWiki:)|(Plantilla:)|(Listas_de_)|(Lista_de_)|(Tabela_de_)|(Archivo:)|(Media:)|(Wikip.dia:)|(Categor.a:)|(Livro:)" +
	            "|(Especial:)|(User:)|(Usu.rio:)|(Ayuda:)|(Manual:)|(Template:)|(Wikt:)|(Wiktionary:)|(Wikinews:)|(Portal:)|(\\(desambiguaci.n\\))",
	            Pattern.CASE_INSENSITIVE);
	}


	@Override
	protected Pattern getDisambTitlePattern() {
		return Pattern.compile("(desambiguación)");
	} 
    
	@Override
    	public Double[] getLatLng() {
  	      if (latLng == null) latLng = SpanishWikiCoordinatesUtil.INSTANCE.getCoordinates(getInfobox());
              return latLng;
    	}

	@Override    
	public Long getPopulation() {
	    	return SpanishWikiPopulationUtil.INSTANCE.getPopulation(getInfobox());
	}

	@Override    
	public Float getArea() {
	    	return SpanishWikiAreaUtil.INSTANCE.getArea(getInfobox());
	}    
   
}
